package bitCalculation;

import java.util.ArrayList;
import java.util.List;

public class GrayCode89 {
    public List<Integer> grayCode(int n) {
        List<Integer> result = new ArrayList<>();
        if (n < 1) {
            return result;
        }
        result.add(0);
        int time = 0;
        while (time<n) {
            int size = result.size();
            for (int i = size-1; i >=0 ; i--) {
                Integer v = result.get(i);
                v = v|(1<<time);
                result.add(v);
            }
            time++;
        }
        return result;
    }


//    public List<Integer> grayCode(int n) {
//        List<Integer> result = new ArrayList<>();
//        result.add(0);
//        if (n < 1) {
//            return result;
//        }
//        while (n-- != 0) {
//            List<Integer> temp = new ArrayList<>();
//            for (int i = 0; i < result.size(); i++) {
//                Integer v = result.get(i);
//                v=v<<1;
//                temp.add(v);
//            }
//
//            for (int i = result.size()-1; i >=0 ; i--) {
//                Integer v = result.get(i);
//                v=v<<1;
//                v=v+1;
//                temp.add(v);
//            }
//            result = temp;
//        }
//        return result;
//    }
}
